#include "SelectServer.hpp"
using namespace std;

void testfcntl(int fd)
{
    int n=fcntl(fd, F_GETFL);
    if(n<0)
    {
        perror("fcntl F_GETFL");
        return;
    }
    fcntl(fd, F_SETFL, n | O_NONBLOCK);//设置为非阻塞
}

void test()
{
     testfcntl(0);//标准输入设置为非阻塞

    while(1)
    {
        char buf[1024]={0};
        ssize_t n=read(0, buf, sizeof(buf)-1);
        if(n<0)
        {
            //设置为非阻塞，如果底层fd数据没有就绪，recv/read/write/send，返回值会以出错的形式返回，
            //如果errno是EWOULDBLOCK，表示没有数据，底层没有就绪，如果是其他错误，表示真的出错了
            if(errno==EWOULDBLOCK)
            {
                cout<<"no data"<<endl;
                sleep(1);
                continue;
            }
            else 
            {
                perror("wrong");
                break;
            }
        }
        else if(n==0)
        {
            cout<<"EOF"<<endl;
            break;
        }
        else 
        {
            buf[n-1]='\0';
            cout<<"read "<<n-1<<" bytes: "<<buf<<endl;
        }
    }
}
int main()
{
    unique_ptr<SelectServer> ss(new SelectServer(8080));
    ss->Init();
    ss->Start();
    return 0;
}